package com.mobile.dao;

import java.util.List;

import org.hibernate.criterion.Order;
import org.springframework.orm.hibernate3.HibernateOperations;

import com.mobile.gridUtil.GridFilter;
import com.mobile.struts.action.tools.AssociateTableInfo;

public interface IBaseSpringDAO extends HibernateOperations {
	public List getObjectsByIds(Object o,int start,int pageSize);
	
	public List findByExample(Object o,String[] orders);
	public List findByExample(Object o,List<Order> orders);
	/**
	 * 有表关联的查询
	 * @param sourceObject				要查找的类的实例
	 * @param associatedName			关联类在类中的属性名字数组
	 * @param associatedObject			关联类的实例
	 * @return
	 */
	public List findByAssociatedObjectsExample(Object sourceObject,String[] associatedName,Object[] associatedObject);
	/**
	 * 自关联查询
	 * @param sourceObject		源对象	
	 * @param associatedName	关联对对象名
	 * @param associatedObject	关联对象
	 * @param orders			排序对象
	 * @return
	 */
	public List findByMyselfAssociatedExample(
			Object sourceObject,
			String[] associatedName,
			Object[] associatedObjects,
			String[] orders);
	public void deleteById(Object o,String uniqueCode);
	public void deleteById(String entityName,String uniqueCode);
	public void deleteById(Object o,String[] uniqueCodes);
	public void deleteById(Class o,String[] uniqueCodes);
	public void deleteById(Class o,String uniqueCode);
	public void deleteById(String entityName,String[] uniqueCodes);
	public Object findById(Object o,String id);
	public Object findById(Class clazz,String id);
	public Object findById(String entityName,String id);

	public List findList(Object o,int start,int pageSize);
	public List findList(Object o,String entityName,int start,int pageSize);
	
	/**
	 * 获得总数
	 * @param cl				域模型的类
	 * @param gridFilterList	要过滤的列表值
	 * @return 返回整型值
	 */
	public int getTotalSize(Class cl,List<GridFilter> gridFilterList);
	/**
	 * 获得总数
	 * @param pojo				域模型的类
	 * @param gridFilterList	要过滤的列表值
	 * @return 返回整型值
	 */
	public int getTotalSize(Object pojo,List<GridFilter> gridFilterList);
	/**
	 * 获得总数
	 * @param pojo				域模型的类
	 * @param gridFilterList	要过滤的列表值
	 * @return 返回整型值
	 */
	public int getTotalSize(Object pojo,List<GridFilter> gridFilterList,List<AssociateTableInfo> associateList);	
	/**
	 * 
	 * @param start				开始读取的索引
	 * @param pageSize			总共读取的数目
	 * @param cl				域模型的类
	 * @param gridFilterList	要过滤的列表值
	 * @return					列表
	 */
	public List getPageList(int start,int pageSize,Class cl,List<GridFilter> gridFilterList);
	/**
	 * 
	 * @param start				开始读取的索引
	 * @param pageSize			总共读取的数目
	 * @param pojo				域模型的类
	 * @param gridFilterList	要过滤的列表值
	 * @return					列表
	 */
	public List getPageList(int start,int pageSize,Object pojo,List<GridFilter> gridFilterList);
	/**
	 * 
	 * @param start				开始读取的索引
	 * @param pageSize			总共读取的数目
	 * @param pojo				域模型的类
	 * @param gridFilterList	要过滤的列表值
	 * @return					列表
	 */
	public List getPageList(int start,int pageSize,Object pojo,List<GridFilter> gridFilterList,List<AssociateTableInfo> associateList);
	/**
	 * 获得所有数据
	 * @param cl				域模型的类
	 * @param gridFilterList	要过滤的列表值
	 * @return					列表
	 */
	public List getAllList(Class cl,List<GridFilter> gridFilterList);
	/**
	 * 获得所有数据
	 * @param pojo				域模型的类
	 * @param gridFilterList	要过滤的列表值
	 * @return					列表
	 */
	public List getAllList(Object pojo,List<GridFilter> gridFilterList);
	/**
	 * 获得符合pojo条件的数据
	 * @param pojo				域模型的类
	 * @return					列表
	 */
	public List getAllList(Object pojo);
}
